package dhz.storage.util;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class JwtUtil {
    private static final String SALT = "SaaS";

    /**
     * 根据学号/工号获得一个合法的json web token用于测试，理论上来讲我是不需要管这些的
     * @param identification 学工号
     * @return jwt
     * */
    public static String getToken(String identification){
        Map<String,Object> map = new HashMap<>();
        String token = null;
        try{
            token = JWT.create().withHeader(map)
                    .withClaim("uid", identification)
                    .withIssuedAt(new Date())
                    .sign(Algorithm.HMAC256(SALT));
        }catch(Exception e){
            e.printStackTrace();
        }
        return token;
    }

    /**
     * 从token中获得Identification
     * @param token 目标的json web token
     * @return 学工号
     * */
    public static String getIdentification(String token){
        try{
            DecodedJWT decoded = JWT.decode(token);
            return decoded.getClaim("uid").asString();
        }catch(Exception e){
            return null;
        }
    }

    /**
     * 判断一个token是不是合法的token
     * @param token 待判断的json web token
     * @return 是不是合法
     * */
    public static boolean verify(String token){
        try{
            JWTVerifier verifier = JWT.require(Algorithm.HMAC256(SALT)).build();
            verifier.verify(token);
            return true;
        }catch (Exception e ){
            return false;
        }
    }
}
